package com.digicom.service.user;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digicom.common.entity.User;

/**
 * 用户服务接口
 */
public interface UserService extends IService<User> {
    /**
     * 登录
     *
     * @param username 用户名
     * @param password 密码
     * @param clientType 客户端类型（0-H5，1-APP）
     * @return token
     */
    String login(String username, String password, String clientType);

    /**
     * 通过手机号登录
     *
     * @param mobile 手机号
     * @param code 验证码
     * @param clientType 客户端类型（0-H5，1-APP）
     * @return token
     */
    String loginByMobile(String mobile, String code, String clientType);

    /**
     * 微信登录
     *
     * @param wxCode 微信授权码
     * @param clientType 客户端类型（0-H5，1-APP）
     * @return token
     */
    String loginByWechat(String wxCode, String clientType);

    /**
     * 注册
     *
     * @param user 用户信息
     * @param code 验证码
     * @return 结果
     */
    boolean register(User user, String code);

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户对象
     */
    User getUserByUsername(String username);

    /**
     * 根据手机号查询用户
     *
     * @param mobile 手机号
     * @return 用户对象
     */
    User getUserByMobile(String mobile);

    /**
     * 根据微信OpenId查询用户
     *
     * @param wxOpenId 微信OpenId
     * @return 用户对象
     */
    User getUserByWxOpenId(String wxOpenId);

    /**
     * 查询用户列表（分页）
     *
     * @param user 用户查询条件
     * @param page 分页对象
     * @return 分页结果
     */
    Page<User> listUserPage(User user, Page<User> page);

    /**
     * 重置密码
     *
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return 结果
     */
    boolean resetPassword(Long userId, String newPassword);

    /**
     * 修改用户状态
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 结果
     */
    boolean changeStatus(Long userId, String status);

    /**
     * 修改用户类型
     *
     * @param userId 用户ID
     * @param userType 用户类型
     * @return 结果
     */
    boolean changeUserType(Long userId, String userType);
} 